package file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 25397
 * Date: 2022-04-11
 * Time: 19:27
 */
public class Demo8 {
    //1次读1个字节
//    public static void main(String[] args) throws IOException {
//        //构造方法中需要指定打开文件的路径
//        //此处的路径可以是绝对路径，也可以是相对路径，还可以是File对象
//        //1.创建对象
//        InputStream inputStream=new FileInputStream("D:/test.txt") ;
//        try {
//            //2.尝试一个一个字节的读取，把整个文件读完
//            while(true){
//                //read有三个版本的重载
//                //1.无参：1次读1个字节，返回值是读到的这个字节
//                //2.一个参数版本：1次读n个字节，把读的结果放到参数中指定的数组中，返回值就是读到的字节数
//                //3.三个参数版本：1次读n个字节，把读的结果放到参数中指定的数组中，返回值就是读到的字节数
//                //不是从数组的起始位置放，而是从中间位置放（off这个下标），len表示最多能放多少元素（字节)
//
//                int b=inputStream.read();
//                //为什么是一个字节一个字节的读取，返回值是int？
//                //1个字节的范围是：0~255或-128~127
//                //而这个方法里规定：-1"是已经读完文件"的标记，
//                //如果你正常用byte，就没办法知道-1是正好有一个-1的数，还是说已经读完了
//                //所以我们这里会用更大范围的类型
//
//                //针对字符流，也有类似的设定：1次读一个char
//                if(b==-1){
//                    break;
//                }
//                System.out.print(b+" ");
//            }
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }finally {
//            //读完之后，要关闭文件,释放资源
//            inputStream.close();
//        }
//    }

    //改进写法
//    public static void main(String[] args) throws FileNotFoundException {
//        try(InputStream inputStream=new FileInputStream("D:/test.txt")){
//            while(true){
//                int b=inputStream.read();
//                if(b==-1){
//                    break;
//                }
//                System.out.println(b);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } //这个代码中，没有显示的调用close，但是try会自动帮我们调用
//    }


    //1次读若干字节
//    public static void main(String[] args) {
//        try(InputStream inputStream=new FileInputStream("D:/test.txt")){
//            while(true){
//                byte[] buffer=new byte[1024];
//                int len=inputStream.read(buffer);//把读出来的结果，放在buffer这个数组中
//                //相当于是使用参数来表示方法的返回值，这种做法称为“输出型参数”，java中用的较少，C++用的比较多
//                if(len==-1){
//                    break;//返回-1说明读取完毕
//                }
//                for(int i=0;i<len;i++){
//                    System.out.print(buffer[i]+" ");
//                }
//            }
//        }catch (IOException e){
//            e.printStackTrace();
//        }
//    }



}
